Without intervention, the UTXO set grows without bound β every output, once created, occupies node storage indefinitely regardless of value or age. The temperature system migrates unspent outputs through progressively compressed storage tiers as they age, without ever affecting whether they can be spent.
The temperature system does not modify the block format, transaction format, or network protocol. All nodes remain equal peers. The lifecycle is governed by two layers of rules: consensus rules, which every node enforces unconditionally when validating a block, and node configuration parameters, which govern local storage behavior and can be adjusted by operators without a protocol fork.
The demotion schedule and Normal-tier migration logic are consensus β a block that omits a required demotion, or processes one incorrectly, is invalid.
Protection period, ice index depth, and pruning behavior are local storage decisions. Operators tune them freely; the network never sees the difference.
Memcoin has two output types relevant to temperature. They're treated identically in every storage tier, with one deliberate exception.
Spendable by the holder of a matching private key. Created by standard transactions and by TX2. The temperature clock starts at the block where the output confirmed.
Created exclusively by TX1, encoding an unlockHeight enforced by OP_CHECKLOCKTIMEVERIFY. TX1 requires exactly one P2PKH input (R0), a locked value capped at 1 MEM (R5), and a locktime within Β±30 blocks of a 432-block lock period (R2). Spent exclusively by TX2, which accepts only CLTV+P2PKH inputs (R7) and produces only P2PKH outputs (R10b) β locked outputs never chain or nest; the payment graph stays flat.
For CLTV+P2PKH outputs, the temperature clock starts at unlockHeight, not confirmation height. A locked payment doesn't get penalized for time it was never allowed to spend in the first place.
A UTXO moves through three storage tiers as it ages. The path runs one direction only.
Standard chainstate database lookup. Every newly confirmed output enters here and stays until its temperature reaches zero.
A single record per address, shared across every output at that address. Spendable without reading any historical block.
Only block heights remain on file. Spending reads those blocks and reconstructs the output's data on demand.
Temperature determines when a UTXO moves between tiers β it decays every block, at a rate fixed by consensus.
T1βT3 are consensus rules Β· T4βT5 are node configuration
| Value | Blocks | β time |
|---|---|---|
| 10 kbit (min) | 5 | ~50 min |
| 100 kbit | 50 | ~8 hours |
| 1 mbit | 500 | ~3.5 days |
| 1 MEM | 50,000 | ~347 days |
| Phase | Blocks | β time |
|---|---|---|
| Normal cooling | 50,000 | ~347 days |
| Cold protection | 12,960 | ~90 days |
| Cold cooling | 50,000 | ~347 days |
| Total to Ice | 112,960 | ~784 days |
| Tier | Storage | Lookup |
|---|---|---|
| Normal | ~115 Κ | in-memory, O(1) |
| Cold | ~75 Κ | disk key read, no block access |
| Ice | ~4 Κ | block read and rebuild |
Whether a node retains full block history, has pruned, or has disabled the ice index is an internal detail β invisible to the network. Every node can send and answer utxofall messages.
A CLTV+P2PKH output can't be spent before its locktime expires β enforced at consensus. Anchoring on confirmation height would penalize the holder for time the output was legally unspendable. Anchoring on unlock height means the clock starts only once the output becomes accessible, and a TX1 output and a standard output of equal value created at the same effective moment cool at the same rate.
The scriptPubKey β the dominant fixed cost β is stored once per address rather than once per UTXO. Addresses with many outputs compress significantly; addresses with a single output cost the same as per-UTXO storage would, so there's no downside in the common case.
Everything needed for future validation β value, scriptPubKey, coinbase flag, block height β is copied from the chainstate record at the moment of demotion. Block reads are deferred entirely to Ice, where storage is already minimal and a rebuild is expected to be rare.
Any node that propagated a transaction or block already validated it β which means it already resolved every input, including Ice UTXOs. It's guaranteed to hold the data. Broadcasting would reach nodes that may not, wasting bandwidth for no benefit.
The H and X indexes already record exactly which UTXOs changed tier and what their data was, for the most recent REORG_BUFFER blocks. Reversing a tier transition is a direct lookup β no separate undo file or log needed, since the network won't accept a deeper reorg in practice.
Every UTXO remains spendable at all times. The temperature system never deletes an output β migration between tiers is a storage optimisation, not a hold on funds. Cold and Ice differ only in how quickly a node reconstructs the data; with 10-minute blocks, that reconstruction never affects confirmation in practice. Consensus enforces only the demotion schedule and Normal-tier migration β Cold and Ice are internal to each node. Nothing about the block format, transaction format, or peer-to-peer protocol changes, apart from the two new point-to-point utxofall messages.